﻿using System;
using System.Windows.Forms;
using DirectorioExalmarEntidades;
using DirectorioExalmarLogicaNegocio;
using GlobalesUtilitarios;

namespace appDirectorioExalmarMant
{
    public partial class frmTablas : Form
    {
        private Boolean _bNuevoCargo;
        private Boolean _bNuevoArea;
        private Boolean _bNuevoSede;

        public frmTablas()
        {
            InitializeComponent();
        }

        private void frmTablas_Load(object sender, EventArgs e)
        {
            dgvAreas.AutoGenerateColumns = false;
            dgvCargos.AutoGenerateColumns = false;
            dgvSedes.AutoGenerateColumns = false;
            CargarAreas(); 
            CargarCargos();
            CargarSedes();
        }

        private void CargarSedes()
        {
            dgvSedes.DataSource = new Sede().Listar(null);
            Generales.CellFormat(dgvSedes);
        }

        private void CargarAreas()
        {
            dgvAreas.DataSource = new Area().Listar(null);
            Generales.CellFormat(dgvAreas);
        }

        private void CargarCargos()
        {
            dgvCargos.DataSource = new Cargo().Listar(null);
            Generales.CellFormat(dgvCargos);
        }

        private void dgvCargos_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoCargo)
            {
                SeleccionarFilaCargo(nFila);
            }
        }

        private void dgvCargos_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoCargo)
            {
                SeleccionarFilaCargo(nFila);
            }
        }

        private void SeleccionarFilaCargo(int nFila)
        {
            txtIdCargo.Text = dgvCargos.Rows[nFila].Cells[0].Value.ToString();
            txtCargo.Text = dgvCargos.Rows[nFila].Cells[1].Value.ToString();
        }

        private void dgvAreas_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoArea)
            {
                SeleccionarFilaArea(nFila);
            }
        }

        private void dgvAreas_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoArea)
            {
                SeleccionarFilaArea(nFila);
            }
        }

        private void SeleccionarFilaArea(int nFila)
        {
            txtIdArea.Text = dgvAreas.Rows[nFila].Cells[0].Value.ToString();
            txtArea.Text = dgvAreas.Rows[nFila].Cells[1].Value.ToString();
        }

        private void dgvSedes_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoSede)
            {
                SeleccionarFilaSede(nFila);
            }
        }

        private void dgvSedes_RowEnter(object sender, DataGridViewCellEventArgs e)
        {
            var nFila = e.RowIndex;
            if (nFila >= 0 && !_bNuevoSede)
            {
                SeleccionarFilaSede(nFila);
            }
        }

        private void SeleccionarFilaSede(int nFila)
        {
            txtIdSede.Text = dgvSedes.Rows[nFila].Cells[0].Value.ToString();
            txtSede.Text = dgvSedes.Rows[nFila].Cells[1].Value.ToString();
        }

        private void btnNuevoCargo_Click(object sender, EventArgs e)
        {
            txtIdCargo.Text = "";
            txtCargo.Text = "";
            dgvCargos.Enabled = false;
            _bNuevoCargo = true;
        }

        private void btnCancelarCargo_Click(object sender, EventArgs e)
        {
            txtIdCargo.Text = "";
            txtCargo.Text = "";
            dgvCargos.Enabled = true;
            _bNuevoCargo = false;
        }

        private void btnGrabarCargo_Click(object sender, EventArgs e)
        {
            int i;
            int? nId = int.TryParse(txtIdCargo.Text, out i) ? (int?)i : null;
            var sDescripcion = String.IsNullOrEmpty(txtCargo.Text) ? null : txtCargo.Text.Trim();

            if (!nId.HasValue && !_bNuevoCargo)
            {
                MessageBox.Show(@"Debe seleccionar un cargo a actualizar", @"Directorio Telefónico", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sDescripcion == null)
            {
                MessageBox.Show(@"Debe ingresar la descripción del cargo", @"Directorio Telefónico", MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                return;
            }
            var oCargo = new CargoInfo(nId, sDescripcion);

            if (_bNuevoCargo)
            {
                if (new Cargo().Registrar(oCargo))
                {
                    MessageBox.Show(@"Cargo registrado con éxito", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarCargos();
                    _bNuevoCargo = false;
                    dgvCargos.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo registrar el cargo", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                if (new Cargo().Actualizar(oCargo))
                {
                    MessageBox.Show(@"Cargo actualizado con éxito", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarCargos();
                    _bNuevoCargo = false;
                    dgvCargos.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo actualizar el cargo", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
        }

        private void btnNuevoArea_Click(object sender, EventArgs e)
        {
            txtIdArea.Text = "";
            txtArea.Text = "";
            dgvAreas.Enabled = false;
            _bNuevoArea = true;
        }

        private void btnCancelarArea_Click(object sender, EventArgs e)
        {
            txtIdArea.Text = "";
            txtArea.Text = "";
            dgvAreas.Enabled = true;
            _bNuevoArea = false;
        }

        private void btnGrabarArea_Click(object sender, EventArgs e)
        {
            int i;
            int? nId = int.TryParse(txtIdArea.Text, out i) ? (int?)i : null;
            var sDescripcion = String.IsNullOrEmpty(txtArea.Text) ? null : txtArea.Text.Trim();

            if (!nId.HasValue && !_bNuevoArea)
            {
                MessageBox.Show(@"Debe seleccionar un área a actualizar", @"Directorio Telefónico", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sDescripcion == null)
            {
                MessageBox.Show(@"Debe ingresar la descripción del área", @"Directorio Telefónico", MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                return;
            }
            var oArea = new AreaInfo(nId, sDescripcion);

            if (_bNuevoArea)
            {
                if (new Area().Registrar(oArea))
                {
                    MessageBox.Show(@"Área registrado con éxito", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarAreas();
                    _bNuevoArea = false;
                    dgvAreas.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo registrar el área", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                if (new Area().Actualizar(oArea))
                {
                    MessageBox.Show(@"Área actualizada con éxito", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarAreas();
                    _bNuevoArea = false;
                    dgvAreas.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo actualizar el área", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
        }

        private void btnNuevoSede_Click(object sender, EventArgs e)
        {
            txtIdSede.Text = "";
            txtSede.Text = "";
            dgvSedes.Enabled = false;
            _bNuevoSede = true;
        }

        private void btnCancelarSede_Click(object sender, EventArgs e)
        {
            txtIdSede.Text = "";
            txtSede.Text = "";
            dgvSedes.Enabled = true;
            _bNuevoSede = false;
        }

        private void btnGrabarSede_Click(object sender, EventArgs e)
        {
            int i;
            int? nId = int.TryParse(txtIdSede.Text, out i) ? (int?)i : null;
            var sDescripcion = String.IsNullOrEmpty(txtSede.Text) ? null : txtSede.Text.Trim();

            if (!nId.HasValue && !_bNuevoSede)
            {
                MessageBox.Show(@"Debe seleccionar una sede a actualizar", @"Directorio Telefónico", MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation);
                return;
            }

            if (sDescripcion == null)
            {
                MessageBox.Show(@"Debe ingresar la descripción de la sede", @"Directorio Telefónico", MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
                return;
            }
            var oSede = new SedeInfo(nId, sDescripcion);

            if (_bNuevoSede)
            {
                if (new Sede().Registrar(oSede))
                {
                    MessageBox.Show(@"Sede registrada con éxito", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarSedes();
                    _bNuevoSede = false;
                    dgvSedes.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo registrar la sede", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
            else
            {
                if (new Sede().Actualizar(oSede))
                {
                    MessageBox.Show(@"Sede actualizada con éxito", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                    CargarSedes();
                    _bNuevoSede = false;
                    dgvSedes.Enabled = true;
                }
                else
                {
                    MessageBox.Show(@"No se pudo actualizar la sede", @"Directorio Telefónico", MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                }
            }
        }

    }
}
